const axios = require('axios')
const config = require('../config') // 需要创建配置文件存储token
const localCache = require('./localCache')

const API_CONFIG = {
  baseUrl: 'http://open.api.tianyancha.com/services/open/ipr/patents/3.0',
  token: config.TIANYANCHA_TOKEN
}

// 添加缓存配置
const CACHE_CONFIG = {
  useCache: true  // 是否使用缓存
}

// 在文件顶部添加缓存状态日志
console.log('================== Patent API 初始化 ==================')
console.log('缓存状态:', CACHE_CONFIG.useCache ? '启用' : '禁用')
console.log('API配置:', {
  baseUrl: API_CONFIG.baseUrl,
  hasToken: !!API_CONFIG.token
})

// 1. 获取专利总数和最新专利列表
async function getPatentTotal(companyName, stockCode) {
  console.log('\n================== 获取专利总数 ==================')
  console.log('请求参数:', {
    companyName,
    stockCode,
    useCache: CACHE_CONFIG.useCache
  })
  
  if (!stockCode) {
    throw new Error('stockCode is required for caching')
  }
  
  // 1. 如果启用缓存,尝试读取缓存
  if (CACHE_CONFIG.useCache) {
    const cacheFile = localCache.generateCacheFilename(stockCode, 'total')
    console.log('检查缓存文件:', cacheFile)
    const cachedData = await localCache.getLocalCache(cacheFile)
    
    if (cachedData) {
      console.log('命中缓存! 数据量:', cachedData.result.items?.length || 0)
      console.log('使用缓存数据:', cacheFile)
      return {
        success: true,
        total: parseInt(cachedData.result.total || 0),
        data: cachedData.result.items || [],
        fromCache: true
      }
    } else {
      console.log('未找到缓存,准备请求API')
    }
  }

  try {
    // API请求日志
    console.log('发起API请求...')
    // 对请求参数进行编码
    const params = {
      keyword: encodeURIComponent(companyName),
      pageNum: 1,
      pageSize: 20  // 获取最新20条数据
    }
    
    console.log('请求参数:', {
      url: API_CONFIG.baseUrl,
      params
    })

    const response = await axios.get(API_CONFIG.baseUrl, {
      headers: {
        'Authorization': API_CONFIG.token
      },
      params
    })
    
    console.log('API响应状态:', response.status)
    console.log('API响应内容:', JSON.stringify(response.data, null, 2))
    console.log('获取数据条数:', response.data.result?.items?.length || 0)
    
    // 检查响应结构
    if (!response.data || !response.data.result) {
      console.error('无效的API响应结构:', JSON.stringify(response.data, null, 2))
      throw new Error('Invalid API response structure')
    }
    
    // 缓存保存日志
    if (CACHE_CONFIG.useCache) {
      console.log('保存数据到缓存...')
      const cacheFile = localCache.generateCacheFilename(stockCode, 'total')
      await localCache.saveApiResponse(cacheFile, response.data)
      console.log('缓存保存成功')
    }
    
    return {
      success: true,
      total: parseInt(response.data.result.total || 0),
      data: response.data.result.items || [],
      fromCache: false
    }
    
  } catch(e) {
    console.error('API请求异常:', e.message)
    if (e.response) {
      console.error('API错误详情:', {
        status: e.response.status,
        data: JSON.stringify(e.response.data, null, 2),
        headers: e.response.headers
      })
    } else {
      console.error('完整错误对象:', e)
    }
    throw e
  }
}

// 2. 获取指定年份的专利列表
async function getPatentList(params) {
  const { 
    companyName,
    stockCode,
    pageNum = 1,
    pageSize = 20,
    startDate,
    endDate,
    patentType  // 1-发明专利 2-实用新型 3-外观专利
  } = params
  
  if (!stockCode) {
    throw new Error('stockCode is required for caching')
  }

  console.log('\n================== 获取专利列表 ==================')
  console.log('请求参数:', {
    ...params,
    useCache: CACHE_CONFIG.useCache
  })
  
  // 年度数据请求日志
  const year = params.startDate?.split('-')[0]
  console.log('查询年份:', year)
  
  // 缓存检查日志
  if (CACHE_CONFIG.useCache) {
    const cacheFile = localCache.generateCacheFilename(params.stockCode, 'list', year)
    console.log('检查缓存文件:', cacheFile)
    const cachedData = await localCache.getLocalCache(cacheFile)
    
    if (cachedData) {
      console.log('命中缓存! 数据量:', cachedData.result.items?.length || 0)
      console.log('使用缓存数据:', cacheFile)
      return {
        success: true,
        total: parseInt(cachedData.result.total || 0),
        data: cachedData.result.items || [],
        fromCache: true
      }
    } else {
      console.log('未找到缓存,准备请求API')
    }
  }

  try {
    // API请求日志
    console.log('发起API请求...')
    // 对请求参数进行编码
    const requestParams = {
      keyword: encodeURIComponent(companyName),
      pageNum,
      pageSize,
      pubDateBegin: startDate,
      pubDateEnd: endDate,
      patentType
    }
    
    console.log('请求参数:', {
      url: API_CONFIG.baseUrl,
      params: requestParams
    })

    const response = await axios.get(API_CONFIG.baseUrl, {
      headers: {
        'Authorization': API_CONFIG.token
      },
      params: requestParams
    })
    
    console.log('API响应状态:', response.status)
    console.log('API响应内容:', JSON.stringify(response.data, null, 2))
    
    // 修改检查逻辑：允许 result 为 null 的情况
    if (!response.data) {
      console.error('无效的API响应结构:', JSON.stringify(response.data, null, 2))
      throw new Error('Invalid API response structure')
    }
    
    // 如果 result 为 null，说明该年份没有数据
    if (response.data.result === null) {
      console.log('该年份无专利数据')
      return {
        success: true,
        total: 0,
        data: [],
        fromCache: false
      }
    }
    
    // 正常返回数据
    return {
      success: true,
      total: parseInt(response.data.result.total || 0),
      data: response.data.result.items || [],
      fromCache: false
    }
    
  } catch(e) {
    console.error('API请求异常:', e.message)
    if (e.response) {
      console.error('API错误详情:', {
        status: e.response.status,
        data: JSON.stringify(e.response.data, null, 2),
        headers: e.response.headers
      })
    } else {
      console.error('完整错误对象:', e)
    }
    throw e
  }
}

module.exports = {
  getPatentTotal,
  getPatentList
}